package model;

import java.awt.Point;
import java.util.Observable;
import java.util.Observer;

/**
 * Implémentation d'un passant observateur d'un avatar
 * @author lmatignon
 *
 */
public class Passant extends PersoAbstract implements Observer {
	/**
	 * Avatar observé
	 */
	private Avatar avatar;
	/**
	 *  si avatar dans champ de vision 
	 */
	private Boolean display;
	/**
	 *  
	 */
	private Boolean saluerIn;
	private Boolean saluerOut;


	private Boolean firstSaluerIn;
	private Boolean firstSaluerOut; 
	/**
	 * Constructeur et s'enregistre comme observateur de l'avatar 
	 * @param pos
	 * @param champVision
	 * @param avatar
	 */
	public Passant(Point pos, int champVision, Avatar avatar) {
		super(pos,champVision);

		this.avatar = avatar;
		this.display = false;
		this.saluerIn = false;
		this.saluerOut = false;
		this.firstSaluerIn = true;
		this.firstSaluerOut = true;
		this.avatar.addObserver(this);//passant observe avatar
	}
	/**
	 * Mise à jour des attributs display et saluer lorsque notifié par observé avatar.
	 * <p>
	 * Check que <ul> <li>si passant dans chp de vision de avatar, display passant</li>
	 * <li>si avatar entre dans chp de vision de passant pour premiere fois bonjour</li>
	 * <li>si avatar sort du chp de vision de passant pour premiere fois aurevoir</li>
	 * </ul>
	 */
	@Override
	public void update(Observable arg0, Object arg1) {
		//à la notification de l'init, on met juste à jour l'affichage.
		
		if (avatar.isInMyField(this))
			this.display = true;
		else
			this.display = false;
	//	if (arg1.toString() != "init"){
			if (this.isInMyField(avatar.getPerso())){
				saluerOut = false;
				firstSaluerOut = false;
				if (!firstSaluerIn){
					firstSaluerIn = true;
					saluerIn = true;
				}
				else{
					saluerIn = false;
				}
			}
			if (!this.isInMyField(avatar.getPerso())){
				saluerIn = false;
				firstSaluerIn = false;
				if (!firstSaluerOut){
					firstSaluerOut = true;
					saluerOut = true;
				}
				else
					saluerOut = false;
			}
		//}
			
	}
	
	public Boolean getDisplay() {
		return display;
	}	
	public Boolean getSaluerIn() {
		return saluerIn;
	}
	public Boolean getSaluerOut() {
		return saluerOut;
	}
	@Override
	public String toString() {
		return "Passant [pos=" + pos + ", champVision=" + champVision
				+ ", display=" + display + ", saluerIn=" + saluerIn
				+ ", saluerOut=" + saluerOut + ", firstSaluerIn="
				+ firstSaluerIn + ", firstSaluerOut=" + firstSaluerOut + "]";
	}
	
}
